package io.gitee.geminidev.bot.type;

import io.gitee.geminidev.bot.domain.*;

/**
 * @Author gemini
 * @Date 2023/4/19 20:40
 * @description: 事件类型
 */
public enum EventType {

    READY(ReadyMessage.class),

    /** 当机器人加入新guild时 */
    GUILD_CREATE(GuildMessage.class),
    /** 当guild资料发生变更时 */
    GUILD_UPDATE(null),
    /** 当guild资料发生变更时 */
    GUILD_DELETE(null),
    /** 当channel被创建时 */
    CHANNEL_CREATE(ChannelMessage.class),
    /** 当channel被更新时 */
    CHANNEL_UPDATE(null),
    /** 当channel被删除时 */
    CHANNEL_DELETE(null),
    /** 当成员加入时 */
    GUILD_MEMBER_ADD(null),
    /** 当成员资料变更时 */
    GUILD_MEMBER_UPDATE(null),
    /** 当成员被移除时 */
    GUILD_MEMBER_REMOVE(null),
    /** 发送消息事件，代表频道内的全部消息，而不只是 at 机器人的消息。内容与 AT_MESSAGE_CREATE 相同 */
    MESSAGE_CREATE(Message.class),
    /** 删除（撤回）消息事件 */
    MESSAGE_DELETE(null),
    /** 为消息添加表情表态 */
    MESSAGE_REACTION_ADD(null),
    /** 为消息删除表情表态 */
    MESSAGE_REACTION_REMOVE(null),
    /** 当收到用户发给机器人的私信消息时 */
    DIRECT_MESSAGE_CREATE(null),
    /** 删除（撤回）消息事件 */
    DIRECT_MESSAGE_DELETE(null),
    /** 当用户创建主题时 */
    OPEN_FORUM_THREAD_CREATE(null),
    /** 当用户更新主题时 */
    OPEN_FORUM_THREAD_UPDATE(null),
    /** 当用户删除主题时 */
    OPEN_FORUM_THREAD_DELETE(null),
    /** 当用户创建帖子时 */
    OPEN_FORUM_POST_CREATE(null),
    /** 当用户删除帖子时 */
    OPEN_FORUM_POST_DELETE(null),
    /** 当用户回复评论时 */
    OPEN_FORUM_REPLY_CREATE(null),
    /** 当用户删除评论时 */
    OPEN_FORUM_REPLY_DELETE(null),
    /** 当用户进入音视频/直播子频道 */
    AUDIO_OR_LIVE_CHANNEL_MEMBER_ENTER(null),
    /** 当用户离开音视频/直播子频道 */
    AUDIO_OR_LIVE_CHANNEL_MEMBER_EXIT(null),
    /** 互动事件创建时 */
    INTERACTION_CREATE(null),
    /** 消息审核通过 */
    MESSAGE_AUDIT_PASS(null),
    /** 消息审核不通过 */
    MESSAGE_AUDIT_REJECT(null),
    /** 当用户创建主题时 */
    FORUM_THREAD_CREATE(null),
    /** 当用户更新主题时 */
    FORUM_THREAD_UPDATE(null),
    /** 当用户删除主题时 */
    FORUM_THREAD_DELETE(null),
    /** 当用户创建帖子时 */
    FORUM_POST_CREATE(null),
    /** 当用户删除帖子时 */
    FORUM_POST_DELETE(null),
    /** 当用户回复评论时 */
    FORUM_REPLY_CREATE(null),
    /** 当用户删除评论时 */
    FORUM_REPLY_DELETE(null),
    /** 当用户发表审核通过时 */
    FORUM_PUBLISH_AUDIT_RESULT(null),
    /** 音频开始播放时 */
    AUDIO_START(null),
    /** 音频播放结束时 */
    AUDIO_FINISH(null),
    /** 上麦时 */
    AUDIO_ON_MIC(null),
    /** 下麦时 */
    AUDIO_OFF_MIC(null),
    /** 当收到@机器人的消息时 */
    AT_MESSAGE_CREATE(Message.class),
    /** 当频道的消息被删除时 */
    PUBLIC_MESSAGE_DELETE(null),
    ;

    private Class<? extends BaseMessage> clazz;

    EventType(Class<? extends BaseMessage> clazz){
        this.clazz = clazz;
    }

    public Class<? extends BaseMessage> clazz(){
        return clazz;
    }
}
